// 1. 引入需要的工具：axios（发请求用）、Element UI的Message（弹提示用）
import axios from 'axios';
import { Message } from 'element-ui';

// 2. 创建一个"定制版"的axios（叫service），以后所有请求都用这个service发
const service = axios.create({
    // 后端接口的基础地址（比如后端跑在 http://localhost:8080，就填这个）
    // 后续发请求时，只需写接口的后半部分（比如 /login），会自动拼接成 http://localhost:8080/login
    baseURL: 'http://localhost:8080',
    timeout: 5000, // 请求超过5秒没反应，就提示"超时"
});

// 3. 请求拦截器：发请求前自动做一些操作（比如给请求加token）
service.interceptors.request.use(
    (config) => {
        // 从localStorage（浏览器本地存储）里取之前存的token
        const token = localStorage.getItem('token');
        // 如果有token，就加到请求头里（后端拦截器会检查这个请求头）
        // 后端要求格式是 "Bearer + 空格 + token"，所以这里要拼接 'Bearer '
        if (token) {
            config.headers.Authorization = `Bearer ${token}`;
        }
        return config; // 放行，让请求发出去
    },
    (error) => {
        // 如果请求还没发出去就报错（比如网络问题），就返回错误
        return Promise.reject(error);
    }
);



// 4. 响应拦截器：收到后端返回后自动做一些操作（比如处理成功/失败）
service.interceptors.response.use(
    (response) => {
        // response.data 就是后端返回的JSON数据（比如 {code:200, message:"登录成功", data:"token字符串"}）
        const res = response.data;

        // 后端用code=200表示成功（和你后端返回的一致）
        if (res.code === 200) {
            // 如果是登录接口的响应，就把后端返回的token存到localStorage里
            // response.config.url 是当前请求的后端接口地址（比如 /login）
            if (response.config.url.includes('/login')) {
                localStorage.setItem('token', res.data); // res.data就是后端返回的token字符串
            }
            // 👇 这行代码会把后端返回的所有数据打印到控制台
            console.log('后端返回的数据：', res);
            return res; // 把后端数据返回给调用接口的地方
        } else {
            // 如果code不是200（比如后端返回401用户不存在），就弹错误提示
            // Message.error(res.message || '请求失败');
            //
            // return Promise.reject(new Error(res.message || '请求失败'))-
            return res;
        }
    },
    (error) => {
        // 如果后端返回的http状态码是401（比如token无效）
        // 先判断 error.response 和 error.response.data 是否存在，再访问 code
        if (error.response && error.response.data && error.response.data.code === 401) {
            Message.error('登录已过期，请重新登录');
            localStorage.removeItem('token');
            window.location.href = '/#/login';
        } else {
            // 其他错误：优先显示后端返回的 message，否则显示默认提示
            const errorMsg = error.response?.data?.message || error.message || '网络错误';
            Message.error(errorMsg);
        }
        return Promise.reject(error);
        //return Promise.reject(error);
    }
);



// 5. 导出这个定制版的service，供其他组件使用
export default service;